package com.traffic.managent;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.cxhome.cxinfox.log.SysLog;
import com.traffic.managent.annotation.ControllerBind;
import com.traffic.managent.base.CxBaseController;
import com.traffic.managent.config.CxHomeproperties;
import com.traffic.managent.model.system.Menu;
import com.traffic.managent.model.system.User;
import com.traffic.managent.util.CxhomeUtils;
import com.traffic.managent.util.ImageCode;
import com.traffic.managent.util.Md5Utils;
import com.traffic.managent.util.SecurityPbkdf2Utils;
import com.traffic.managent.util.StringUtils;

/**
 * adminController
 */
@ControllerBind(controllerKey = "/adminCx")
public class AdminController extends CxBaseController {

	public static final String loginPage = "/pages/admin/login.html";
	public static final String homePage = "/adminCx/home";

	public void index() {
		if (getSessionUser() != null) {
			// 如果session存在，不再验证
			redirect(homePage);
		} else {
			render(loginPage);
		}

	}

	/**
	 * 登录
	 */
	public void login() {
		// 获取验证码
		String imageCode = getSessionAttr(ImageCode.class.getName());
		String checkCode = this.getPara("imageCode");

		if (StringUtils.isEmpty(imageCode) || !imageCode.equalsIgnoreCase(checkCode)) {
			setAttr("msg", "验证码错误！");
			render(loginPage);
			return;
		}

		// 初始化数据字典Map
		String username = getPara("username");
		String password = getPara("password");

		if (StringUtils.isEmpty(username)) {
			setAttr("msg", "用户名不能为空");
			render(loginPage);
			return;
		} else if (StringUtils.isEmpty(password)) {
			setAttr("msg", "密码不能为空");
			render(loginPage);
			return;
		}
		User cxuser = User.dao.findFirstByWhere(" where 1=1 and status ='1' and username= ? ", username);
		if (cxuser == null || cxuser.getStr("ids") == null) {
			setAttr("msg", "用户不存在，请您重新输入。");
			render(loginPage);
			return;
		}

		try {
			byte[] userPassword = cxuser.getBytes("password");
			byte[] usersalt = cxuser.getBytes("salt");

			boolean bool = SecurityPbkdf2Utils.authenticate(password, userPassword, usersalt);
			if (!bool) {
				setAttr("msg", "认证错误，请您重新输入。");
				render(loginPage);
				return;
			}

		} catch (Exception e) {
			log.error("认证异常", e);
			setAttr("msg", "认证异常，请您重新输入。");
			render(loginPage);
			return;
		}

		setSessionUser(cxuser);
		redirect(homePage);
	}
//	public void login() {
//		// 获取验证码
//		String imageCode = getSessionAttr(ImageCode.class.getName());
//		String checkCode = this.getPara("imageCode");
//		
//		if (StringUtils.isEmpty(imageCode) || !imageCode.equalsIgnoreCase(checkCode)) {
//			setAttr("msg", "验证码错误！");
//			render(loginPage);
//			return;
//		}
//		
//		// 初始化数据字典Map
//		String username = getPara("username");
//		String password = getPara("password");
//		
//		if (StringUtils.isEmpty(username)) {
//			setAttr("msg", "用户名不能为空");
//			render(loginPage);
//			return;
//		} else if (StringUtils.isEmpty(password)) {
//			setAttr("msg", "密码不能为空");
//			render(loginPage);
//			return;
//		}
//		// String encryptPassword = JFlyFoxUtils.passwordEncrypt(password); //
//		// 前台md5加密
//		String encryptPassword = password;
//		
//		User cxuser = User.dao.findFirstByWhere(" where 1=1 and status ='1' and username= ? ", username);
//		if (cxuser == null || cxuser.getStr("ids") == null) {
//			setAttr("msg", "用户不存在，请您重新输入。");
//			render(loginPage);
//			return;
//		}
//		
//		String md5Password = "";
//		try {
//			String userPassword = cxuser.getStr("password");
//			String decryptPassword = CxhomeUtils.passwordDecrypt(userPassword);
//			md5Password = new Md5Utils().getMD5(decryptPassword).toLowerCase();
//		} catch (Exception e) {
//			log.error("认证异常", e);
//			setAttr("msg", "认证异常，请您重新输入。");
//			render(loginPage);
//			return;
//		}
//		
//		if (!md5Password.equals(encryptPassword)) {
//			setAttr("msg", "认证错误，请您重新输入。");
//			render(loginPage);
//			return;
//		}
//		
//		// if (!(cxuser.getInt("usertype") == 1 || cxuser.getInt("usertype") ==
//		// 2)) {
//		// setAttr("msg", "您没有登录权限，请您重新输入。");
//		// render(loginPage);
//		// return;
//		// }
//		
//		setSessionUser(cxuser);
//		
//		// 第一个页面跳转
////		String tmpMainPage = setFirstPage();
////		String tmpMainPage = setFirstPage();
//		
////		if (tmpMainPage == null) {
////			setAttr("msg", "没有权限，请联系管理员。");
////			render(loginPage);
////			return;
////		}
//		
//		redirect(homePage);
//	}

	/**
	 * 获取第一个跳转页面
	 * @param map
	 * @return
	 */
	protected String setFirstPage() {
		Map<String, List<Menu>> map = getSessionAttr("menuCx");
		if (map == null || map.size() <= 0) {
			return null;
		}

		String tmpMainPage = "";
		List<String> menuList = new ArrayList<String>();

		List<Menu> list = map.get("0");
		for (Menu menu : list) {
			if (StringUtils.isNotEmpty(menu.getStr("url"))) {
				menuList.add("/" + menu.getStr("url"));
			}
			List<Menu> list2 = map.get(menu.getStr("ids"));
			if (list2 == null || list2.size() < 0) {
				continue;
			}

			for (Menu menu2 : list2) {
				if (StringUtils.isNotEmpty(menu2.getStr("url"))) {
					menuList.add("/" + menu2.getStr("url"));
				}
			}

		}

		if (menuList.size() <= 0) {
			return null;
		}

		if (menuList.contains(homePage)) {
			tmpMainPage = homePage;
		} else {
			tmpMainPage = menuList.get(0);
		}

		if (!tmpMainPage.startsWith("/")) {
			tmpMainPage = "/" + tmpMainPage;
		}
		return tmpMainPage;
	}

	/**
	 * 登出
	 */
	public void logout() {
		User user = (User) getSessionUser();
		if (user != null) {
			// 添加日志
			user.put("update_id", user.getUseriD());
			user.put("update_time", getNow());
			// 删除session
			removeSessionUser();
		}

		setAttr("msg", "您已退出");
		render(loginPage);
	}

	public void trans() {
		String redirectPath = getPara();
		if (StringUtils.isEmpty(redirectPath)) {
			redirectPath = CxHomeproperties.getStr("PAGES.TRANS");
		} else if (redirectPath.equals("auth")) {
			redirectPath = "/pages/error/trans_no_auth.html";
		}
		render(redirectPath);
	}
}
